#!/bin/bash

# Breeze Admin 启动脚本
# 作者: System Admin
# 日期: $(date +%Y-%m-%d)

set -e

# 配置变量
DEPLOY_DIR="/Users/shouzhi/techzhi/project/gitee/jar-deploy"
JAR_NAME="breeze-admin.jar"
SERVICE_NAME="breeze-admin"
JAR_FILE="$DEPLOY_DIR/$JAR_NAME"
PID_FILE="$DEPLOY_DIR/${SERVICE_NAME}.pid"
LOG_DIR="$DEPLOY_DIR/logs"
CONFIG_DIR="$DEPLOY_DIR/config"
JAVA_OPTS_FILE="$CONFIG_DIR/java-opts.conf"

# 确保日志目录存在
mkdir -p "$LOG_DIR"

# 检查Java环境
if [ -z "$JAVA_HOME" ]; then
    # 适配macOS的Java路径
    if [ -d "/Library/Java/JavaVirtualMachines" ]; then
        export JAVA_HOME="/Library/Java/JavaVirtualMachines/$(ls /Library/Java/JavaVirtualMachines | head -1)/Contents/Home"
    elif command -v java > /dev/null 2>&1; then
        export JAVA_HOME="$(dirname $(dirname $(readlink -f $(which java))))"
    else
        echo "错误: Java环境未找到，请检查JAVA_HOME设置"
        exit 1
    fi
fi

if [ ! -f "$JAVA_HOME/bin/java" ]; then
    echo "错误: Java环境未找到，请检查JAVA_HOME设置: $JAVA_HOME"
    exit 1
fi

# 检查jar文件
if [ ! -f "$JAR_FILE" ]; then
    echo "错误: JAR文件不存在: $JAR_FILE"
    exit 1
fi

# 检查是否已经运行
if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p "$PID" > /dev/null 2>&1; then
        echo "错误: 服务已经在运行 (PID: $PID)"
        exit 1
    else
        echo "警告: 发现旧的PID文件，正在清理..."
        rm -f "$PID_FILE"
    fi
fi

# 加载JVM参数
JAVA_OPTS=""
if [ -f "$JAVA_OPTS_FILE" ]; then
    JAVA_OPTS=$(cat "$JAVA_OPTS_FILE" | tr '\n' ' ')
fi

# 默认JVM参数
DEFAULT_OPTS="-server -Xms512m -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
DEFAULT_OPTS="$DEFAULT_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
DEFAULT_OPTS="$DEFAULT_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR"
DEFAULT_OPTS="$DEFAULT_OPTS -Dspring.profiles.active=prod"
DEFAULT_OPTS="$DEFAULT_OPTS -Dlogging.config=$CONFIG_DIR/logback-spring.xml"
DEFAULT_OPTS="$DEFAULT_OPTS -Dlogging.path=$LOG_DIR"

# 合并JVM参数
FINAL_OPTS="$DEFAULT_OPTS $JAVA_OPTS"

echo "启动 Breeze Admin 服务..."
echo "JAR文件: $JAR_FILE"
echo "日志目录: $LOG_DIR"
echo "JVM参数: $FINAL_OPTS"

# 启动应用
nohup "$JAVA_HOME/bin/java" $FINAL_OPTS -jar "$JAR_FILE" > "$LOG_DIR/startup.log" 2>&1 &

# 保存PID
echo $! > "$PID_FILE"

# 等待启动
sleep 5

# 检查启动状态
if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p "$PID" > /dev/null 2>&1; then
        echo "服务启动成功 (PID: $PID)"
        echo "日志文件: $LOG_DIR/${SERVICE_NAME}.log"
        echo "启动日志: $LOG_DIR/startup.log"
    else
        echo "错误: 服务启动失败"
        rm -f "$PID_FILE"
        exit 1
    fi
else
    echo "错误: 无法创建PID文件"
    exit 1
fi
